j 是窗口的右边界，遍历数组中的每个元素。
m[nums[j]]++ 更新当前元素 nums[j] 在哈希表中的计数。
当当前元素的计数 m[nums[j]] 超过 k，通过移动左边界 i，缩小窗口直到计数不超过 k。
m[nums[i++]]-- 减少窗口左端的元素的计数，并将左边界右移。
更新 res 为当前窗口的最大长度 (j - i + 1)，其中 j - i + 1 是当前窗口的长度。

class Solution {
public:
    int maxSubarrayLength(vector<int>& nums, int k) 
    {
        unordered_map <int,int> m;
        int res = 0;
        for(int i = 0, j = 0; j < nums.size(); j++)
        {
            m[nums[j]]++;
            while(m[nums[j]] > k)
                m[nums[i++]]--;
            res = max(res, j - i + 1);
        }
        return res;
    }
};